#include <iostream>
using namespace std;
#include <stack>
class Solution {
public:
    int reverse(int x) {
        stack<int> st;
        if (x<-(pow(2, 31) - 1) || x>(pow(2, 31) - 1))
        {
            return 0;
        }
        else if (x < 0)
        {
            x = -x;
            int tmp = x;
            int count = 0;
            while (tmp)
            {
                count++;
                tmp /= 10;
            }

            while (x)
            {
                long k = (x % 10) * (pow(10, --count));
                if (k > pow(2, 31) - 1)
                {
                    return 0;
                }
                st.push(k);
                x /= 10;
            }

            long ret = 0;
            while (!st.empty())
            {
                ret += st.top();
                st.pop();
            }

            if (ret > (pow(2, 31) - 1))
            {
                return 0;
            }
            return -ret;
        }

        else if (x == 0)
        {
            return 0;
        }

        int tmp = x;
        int count = 0;
        while (tmp)
        {
            count++;
            tmp /= 10;
        }

        while (x)
        {
            long k = (x % 10) * (pow(10, --count));
            if (k > pow(2, 31) - 1)
            {
                return 0;
            }
            st.push(k);
            x /= 10;
        }

        long ret = 0;
        while (!st.empty())
        {
            ret += st.top();
            st.pop();
        }
        if (ret > (pow(2, 31) - 1))
        {
            return 0;
        }
        return ret;
    }
};
int main()
{
    Solution s1;
    s1.reverse(-123);
    return 0;
}